home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / gconv.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-05-08  |  5.2 KB  |  180 lines

  1. /* Copyright (C) 1997-1999, 2000-2002 Free Software Foundation, Inc.
  2.    This file is part of the GNU C Library.
  3.  
  4.    The GNU C Library is free software; you can redistribute it and/or
  5.    modify it under the terms of the GNU Lesser General Public
  6.    License as published by the Free Software Foundation; either
  7.    version 2.1 of the License, or (at your option) any later version.
  8.  
  9.    The GNU C Library is distributed in the hope that it will be useful,
  10.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12.    Lesser General Public License for more details.
  13.  
  14.    You should have received a copy of the GNU Lesser General Public
  15.    License along with the GNU C Library; if not, write to the Free
  16.    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  17.    02111-1307 USA.  */
  18.  
  19. /* This header provides no interface for a user to the internals of
  20.    the gconv implementation in the libc.  Therefore there is no use
  21.    for these definitions beside for writing additional gconv modules.  */
  22.  
  23. #ifndef _GCONV_H
  24. #define _GCONV_H    1
  25.  
  26. #include <features.h>
  27. #define __need_mbstate_t
  28. #include <wchar.h>
  29. #define __need_size_t
  30. #define __need_wchar_t
  31. #include <stddef.h>
  32.  
  33. /* ISO 10646 value used to signal invalid value.  */
  34. #define __UNKNOWN_10646_CHAR    ((wchar_t) 0xfffd)
  35.  
  36. /* Error codes for gconv functions.  */
  37. enum
  38. {
  39.   __GCONV_OK = 0,
  40.   __GCONV_NOCONV,
  41.   __GCONV_NODB,
  42.   __GCONV_NOMEM,
  43.  
  44.   __GCONV_EMPTY_INPUT,
  45.   __GCONV_FULL_OUTPUT,
  46.   __GCONV_ILLEGAL_INPUT,
  47.   __GCONV_INCOMPLETE_INPUT,
  48.  
  49.   __GCONV_ILLEGAL_DESCRIPTOR,
  50.   __GCONV_INTERNAL_ERROR
  51. };
  52.  
  53.  
  54. /* Flags the `__gconv_open' function can set.  */
  55. enum
  56. {
  57.   __GCONV_IS_LAST = 0x0001,
  58.   __GCONV_IGNORE_ERRORS = 0x0002
  59. };
  60.  
  61.  
  62. /* Forward declarations.  */
  63. struct __gconv_step;
  64. struct __gconv_step_data;
  65. struct __gconv_loaded_object;
  66. struct __gconv_trans_data;
  67.  
  68.  
  69. /* Type of a conversion function.  */
  70. typedef int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *,
  71.                 __const unsigned char **, __const unsigned char *,
  72.                 unsigned char **, size_t *, int, int);
  73.  
  74. /* Type of a specialized conversion function for a single byte to INTERNAL.  */
  75. typedef wint_t (*__gconv_btowc_fct) (struct __gconv_step *, unsigned char);
  76.  
  77. /* Constructor and destructor for local data for conversion step.  */
  78. typedef int (*__gconv_init_fct) (struct __gconv_step *);
  79. typedef void (*__gconv_end_fct) (struct __gconv_step *);
  80.  
  81.  
  82. /* Type of a transliteration/transscription function.  */
  83. typedef int (*__gconv_trans_fct) (struct __gconv_step *,
  84.                   struct __gconv_step_data *, void *,
  85.                   __const unsigned char *,
  86.                   __const unsigned char **,
  87.                   __const unsigned char *, unsigned char **,
  88.                   size_t *);
  89.  
  90. /* Function to call to provide transliteration module with context.  */
  91. typedef int (*__gconv_trans_context_fct) (void *, __const unsigned char *,
  92.                       __const unsigned char *,
  93.                       unsigned char *, unsigned char *);
  94.  
  95. /* Function to query module about supported encoded character sets.  */
  96. typedef int (*__gconv_trans_query_fct) (__const char *, __const char ***,
  97.                     size_t *);
  98.  
  99. /* Constructor and destructor for local data for transliteration.  */
  100. typedef int (*__gconv_trans_init_fct) (void **, const char *);
  101. typedef void (*__gconv_trans_end_fct) (void *);
  102.  
  103. struct __gconv_trans_data
  104. {
  105.   /* Transliteration/Transscription function.  */
  106.   __gconv_trans_fct __trans_fct;
  107.   __gconv_trans_context_fct __trans_context_fct;
  108.   __gconv_trans_end_fct __trans_end_fct;
  109.   void *__data;
  110.   struct __gconv_trans_data *__next;
  111. };
  112.  
  113.  
  114. /* Description of a conversion step.  */
  115. struct __gconv_step
  116. {
  117.   struct __gconv_loaded_object *__shlib_handle;
  118.   __const char *__modname;
  119.  
  120.   int __counter;
  121.  
  122.   char *__from_name;
  123.   char *__to_name;
  124.  
  125.   __gconv_fct __fct;
  126.   __gconv_btowc_fct __btowc_fct;
  127.   __gconv_init_fct __init_fct;
  128.   __gconv_end_fct __end_fct;
  129.  
  130.   /* Information about the number of bytes needed or produced in this
  131.      step.  This helps optimizing the buffer sizes.  */
  132.   int __min_needed_from;
  133.   int __max_needed_from;
  134.   int __min_needed_to;
  135.   int __max_needed_to;
  136.  
  137.   /* Flag whether this is a stateful encoding or not.  */
  138.   int __stateful;
  139.  
  140.   void *__data;        /* Pointer to step-local data.  */
  141. };
  142.  
  143. /* Additional data for steps in use of conversion descriptor.  This is
  144.    allocated by the `init' function.  */
  145. struct __gconv_step_data
  146. {
  147.   unsigned char *__outbuf;    /* Output buffer for this step.  */
  148.   unsigned char *__outbufend; /* Address of first byte after the output
  149.                  buffer.  */
  150.  
  151.   /* Is this the last module in the chain.  */
  152.   int __flags;
  153.  
  154.   /* Counter for number of invocations of the module function for this
  155.      descriptor.  */
  156.   int __invocation_counter;
  157.  
  158.   /* Flag whether this is an internal use of the module (in the mb*towc*
  159.      and wc*tomb* functions) or regular with iconv(3).  */
  160.   int __internal_use;
  161.  
  162.   __mbstate_t *__statep;
  163.   __mbstate_t __state;    /* This element must not be used directly by
  164.                any module; always use STATEP!  */
  165.  
  166.   /* Transliteration information.  */
  167.   struct __gconv_trans_data *__trans;
  168. };
  169.  
  170.  
  171. /* Combine conversion step description with data.  */
  172. typedef struct __gconv_info
  173. {
  174.   size_t __nsteps;
  175.   struct __gconv_step *__steps;
  176.   __extension__ struct __gconv_step_data __data __flexarr;
  177. } *__gconv_t;
  178.  
  179. #endif /* gconv.h */
  180.